package com.common.domain;

import java.util.*;

/**
 * 封装WebService返回结果对象，主要用来处理返回结果比较复杂的情况
 * @author cgtz
 * @date 2015年4月24日
 */
public class ResultMap extends HashMap<String, Object>{
	private static final long serialVersionUID = 4377297445500301879L;

	public ResultMap(){
		super();
	}
	
	/**
	 * 增加对象结果
	 * @param name 对象名称
	 * @param result 对象
	 * @return
	 * @author cgtz
	 * @date 2015年4月24日
	 */
	public ResultMap addResult(String name, Object result){
		super.put(name, result);
		return this;
	}
	
	/**
	 * 增加List类型结果
	 * @param name list名称
	 * @param result 添加到List中的元素
	 * @return
	 * @author cgtz
	 * @date 2015年4月24日
	 */
	@SuppressWarnings("unchecked")
	public ResultMap addList(String name, Object result){
		Object value = super.get(name);
		if (value == null) {
			List<Object> list = new LinkedList();
			list.add(result);
			super.put(name, list);
		}else {
			if (value instanceof List) {
				List<Object> list = (List<Object>) value;
				list.add(result);
			}else {
				throw new IllegalArgumentException(name + " is not List!");
			}
		}
		return this;
	}
	
	/**
	 * 增加Set类型结果
	 * @param name set名称
	 * @param result 添加到Set中的元素
	 * @return
	 * @author cgtz
	 * @date 2015年4月24日
	 */
	@SuppressWarnings("unchecked")
	public ResultMap addSet(String name, Object result){
		Object value = super.get(name);
		if (value == null) {
			Set<Object> set = new HashSet();
			set.add(result);
			super.put(name, set);
		}else {
			if (value instanceof Set) {
				Set<Object> set = (Set<Object>) value;
				set.add(result);
			}else {
				throw new IllegalArgumentException(name + " is not Set!");
			}
		}
		return this;
	}
	
	/**
	 * 增加Map类型结果
	 * @param name map名称
	 * @param key Map的Key
	 * @param result 添加到Map中的元素
	 * @return
	 * @author cgtz
	 * @date 2015年4月24日
	 */
	@SuppressWarnings("unchecked")
	public ResultMap addMap(String name, Object key, Object result){
		Object value = super.get(name);
		if (value == null) {
			Map<Object, Object> map = new HashMap();
			map.put(key, result);
			super.put(name, map);
		}else {
			if (value instanceof Map) {
				Map<Object, Object> map = (Map<Object, Object>) value;
				map.put(key, result);
			}else {
				throw new IllegalArgumentException(name + " is not Map!");
			}
		}
		return this;
	}
	
	@Override
	public Object get(Object key) {
		return super.get(key);
	}
	
	@Override
	public Object put(String key, Object value) {
		throw new UnsupportedOperationException("ResultMap.put");
	}
	
	@Override
	public void putAll(Map<? extends String, ? extends Object> m) {
		throw new UnsupportedOperationException("ResultMap.putAll");
	}
	
	@Override
	public Set<String> keySet() {
		throw new UnsupportedOperationException("ResultMap.keySet");
	}
	
	@Override
	public Collection<Object> values() {
		throw new UnsupportedOperationException("ResultMap.values");
	}
}
